Affine 数据迁移到 1Panel 教程

170次阅读
没有评论

导出数据库

docker exec -t 1Panel-postgresql-yUaf \
  pg_dump -Fc -U affine affine \
  > affine_full.dump

这个命令才对

docker exec 1Panel-postgresql-yUaf \
  pg_dump -Fc -U affine affine \
  > /root/affine_full.dump
scp /root/affine_full.dump hk3:/opt/1panel/apps/affine/

导入数据库

docker exec -i 1Panel-postgresql-UwJg \
  pg_restore -U affine -d affine \
  < /opt/1panel/apps/affine/affine_full.dump
docker exec -i 1Panel-postgresql-UwJg \
  pg_restore -U affine -d affine \
  < /opt/1panel/apps/affine/affine_full.dump
root@hh7343277330029:/opt/1panel/apps/affine# ls
affine  affine_data_full.tar.gz  affine_full.dump
root@hh7343277330029:/opt/1panel/apps/affine# rm affine_full.dump -rf
root@hh7343277330029:/opt/1panel/apps/affine# ls
affine  affine_data_full.tar.gz  affine_full.dump
root@hh7343277330029:/opt/1panel/apps/affine# ls -lh
总计 53M
drwxr-xr-x 6 root root 4.0K  2月 22 22:11 affine
-rw-r--r-- 1 root root  43M  2月 22 22:07 affine_data_full.tar.gz
-rw-r--r-- 1 root root  11M  2月 22 22:30 affine_full.dump
root@hh7343277330029:/opt/1panel/apps/affine# docker exec -i 1Panel-postgresql-UwJg \
  pg_restore -U affine -d affine \
  < /opt/1panel/apps/affine/affine_full.dump
root@hh7343277330029:/opt/1panel/apps/affine# 
tar xzvf affine_data_full.tar.gz -C 

非常好,你现在这个报错 已经不是 AFFiNE 的坑了,而是一个标准的 Docker Compose 语法/结构问题,而且你已经把关键信息全部给出来了 👍
我直接精确指出你还差哪一步、为什么会报这个错,以及给你一份“可直接用”的 compose


一、错误的本质(一句话)

service "affine" refers to undefined network 1panel-network

👉 不是 AFFiNE 问题,也不是数据库问题
👉 而是你在当前 docker-compose.yml 里:

  • 使用了 networks: - 1panel-network

  • 但文件中已经没有定义这个 network


二、你现在两个 compose 的差异(问题点)

✅ 原始的 docker-compose.yml.bak0(是对的)

networks:
    1panel-network:
        external: true

这个声明告诉 Docker:

“这个网络已经存在(由 1Panel 创建),我只是用它”


❌ 你现在在用的 docker-compose.yml(少了这一段)

services:
  affine:
    ...
    networks:
      - 1panel-network

没有

networks:
  1panel-network:
    external: true

👉 所以 Docker 直接报:
引用了一个不存在的 network


三、你现在需要做的「唯一正确修改」

保留 network 声明,只删除 migration 相关内容

✅ 正确的 docker-compose.yml(完整可用版)

👉 请你直接整体替换当前文件内容

networks:
  1panel-network:
    external: true

services:
  affine:
    container_name: ${CONTAINER_NAME}
    image: ghcr.io/toeverything/affine:0.26.2
    environment:
      - REDIS_SERVER_HOST=${PANEL_REDIS_HOST}
      - REDIS_SERVER_PORT=6379
      - REDIS_SERVER_PASSWORD=${PANEL_REDIS_ROOT_PASSWORD}
      - DATABASE_URL=postgres://${PANEL_DB_USER}:${PANEL_DB_USER_PASSWORD}@${PANEL_DB_HOST}:${PANEL_DB_PORT}/${PANEL_DB_NAME}
      - AFFINE_INDEXER_ENABLED=false
    volumes:
      - ./data/storage:/root/.affine/storage
      - ./data/config:/root/.affine/config
    ports:
      - ${PANEL_APP_PORT_HTTP}:3010
    networks:
      - 1panel-network
    restart: unless-stopped

📌 重点只有三条:

  • ✅ 保留 networks: 1panel-network: external: true

  • ❌ 删除整个 affine_migration service

  • ❌ 删除 depends_on


四、改完以后你要这样操作(顺序照抄)

# 1. 确保没有残留容器
docker compose down -v

# 2. 再保险一点(可选)
docker rm -f affine affine_migration_job 2>/dev/null || true

# 3. 启动
docker compose up -d

五、启动成功的“标准结果”

1️⃣ 查看容器状态

docker compose ps

你应该看到类似:

affine   Up   0.0.0.0:3010->3010/tcp

不应该再看到:

  • affine_migration_job

  • Waiting

  • Starting 卡住


2️⃣ 看日志(确认没坑)

docker logs affine --tail 50

正常情况:

  • 不再出现 self-host-predeploy

  • 不再出现 migration

  • 服务直接启动


六、为什么这一步是“最后一块拼图”

你现在已经满足 AFFiNE 迁移成功的全部条件

  • ✅ 数据库:pg_dump / pg_restore 完整恢复

  • private.key:原实例一致

  • ✅ data 目录:完整覆盖

  • ✅ 版本:0.26.2 完全一致

  • ✅ migration:已正确跳过

  • ✅ network:修复完成(这一步)

👉 再启动不成功,才是“玄学问题”
但以你现在这个状态,100% 会起来


七、一句话总结(你已经赢了)

你不是在“调服务”
你是在 把一个完整的 AFFiNE 实例,原样搬到另一台服务器

现在这个错误只是:

删 migration 时,顺手把 network 声明也删掉了

补回它,就结束了。


正文完
 1